package sesi.ejava.settings;

//import android.R;
import sesi.ejava.bcam.R;
import sesi.ejava.stream.BluetoothManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class SettingsActivity extends ListActivity {

	private BaseSettings settings;
	private ListView lvListe;
	//Items pour les AlertDialogs
	final CharSequence[] vitre_items = {"2", "4"};
	final CharSequence[] tunit_items = {"Celsius","Fahrenheit"};
	final CharSequence[] sunit_items = {"Km/h","Mph"};
	final CharSequence[] ngear_items = {"4","5","6"};
	final CharSequence[] bool_items	=	{"On","Off"};
	//DialogBox pour modifier les valeurs des settings
	AlertDialog.Builder builder;
	AlertDialog alert;
	private Dialog dialog;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//Creation d'un boite de dialog avec le layout "num_dialog"
		dialog = new Dialog(this);		
		dialog.setContentView(R.layout.num_dialog);
		
		//Mapping du boutton cancel sur pour cacher la DialogBox
		Button cancel_button = (Button) dialog.findViewById(R.id.cancel_button);
		cancel_button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialog.hide();
				
			}
		});
		

		builder = new AlertDialog.Builder(this);
		//Recuperation du singleton BaseSettings
		settings = BaseSettings.getsettingsSingleton(this);
		//Recuperation de la listview
		lvListe = getListView();
		//Set l'adapter pour la liste
		lvListe.setAdapter(settings.getAdapter());
		lvListe.setTextFilterEnabled(true);
		//fonction permettant de detecter le click sur un settings
		lvListe.setOnItemClickListener(new OnItemClickListener() {

			//@Override
			public void onItemClick(AdapterView<?> parent, View view, int position,
					long id) {
				// TODO Auto-generated method stub
				if(position < settings.getListSettings().size()-1){
					switch(position){
					case 0 :
						//Dans le cas ou l'on click sur le premier settings
						//on creer une dialogbox pour choisir parmis les differentes options
						builder.setTitle("Choix du Nombre de Vitres");
						builder.setItems(vitre_items, new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int item) {
								//TODO
								//On utilise un modificateur fourni par la class BaseSettings
								//afin de changer la valeur courante du settings
								//la nouvelle valeur est sauvegarder dans un fichier
								//afin d'etre persistante entre redemarrage de l'application
								settings.setNbVitres((String) vitre_items[item]);
							}
						});
						//on creer la dialogbox
						alert = builder.create();
						//on affiche la dialogbox
						alert.show();
						break;
					case 1:
						builder.setTitle("Pick a temp Unit");
						builder.setItems(tunit_items, new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int item) {
								settings.setTUnit((String) tunit_items[item]);
								//Toast.makeText(getApplicationContext(), tunit_items[item], Toast.LENGTH_SHORT).show();
							}
						});
						alert = builder.create();
						alert.show();
						break;
					case 2:
						builder.setTitle("Pick a speed unit");
						builder.setItems(sunit_items, new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int item) {
								settings.setSUnit((String) sunit_items[item]);
								//Toast.makeText(getApplicationContext(), sunit_items[item], Toast.LENGTH_SHORT).show();
							}
						});
						alert = builder.create();
						alert.show();
						break;
					case 3:
						builder.setTitle("Pick a number of gear");
						builder.setItems(ngear_items, new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int item) {
								settings.setNGear((String) ngear_items[item]);
								//Toast.makeText(getApplicationContext(), ngear_items[item], Toast.LENGTH_SHORT).show();
							}
						});
						alert = builder.create();
						alert.show();
						break;
					case 4:
						//La dialogbox n'est pas la meme dans le cas ou l'on veut
						//pouvoir rentrer une valeur numérique
						//ici on utilise une custom dialogbox
						dialog.setTitle("Input your Gas Quantity");
						//on recupere l'EditText contenu dans la customDialog
						//afin d'effacer le text contenu précédement dedans
						//et d'y afficher une "Hint"
						EditText clear_gas = (EditText) dialog.findViewById(R.id.num_value);
						clear_gas.setText("");
						clear_gas.setHint("Input your Gas Quantity");
						//on recupere le boutton ok
						Button ok_gas = (Button) dialog.findViewById(R.id.ok_button);
						ok_gas.setOnClickListener(new OnClickListener() {
						
							@Override
							public void onClick(View v) {
								// TODO Auto-generated method stub
								//Quand on click ok, on recupere la valeur défini dans la
								//customBox et on set le paramètre Gas avec cette valeur
								//puis on cache la customBox
								EditText text = (EditText) dialog.findViewById(R.id.num_value);
								settings.setQGas(text.getText().toString());
								dialog.hide();
							}
						});						
						dialog.show();	
						break;
					case 5:
						dialog.setTitle("Input your Oil Quantity");
						EditText clear_oil = (EditText) dialog.findViewById(R.id.num_value);
						clear_oil.setText("");
						clear_oil.setHint("Input your Oil Quantity");
						Button ok_oil = (Button) dialog.findViewById(R.id.ok_button);
						ok_oil.setOnClickListener(new OnClickListener() {

							@Override
							public void onClick(View v) {
								// TODO Auto-generated method stub	
								EditText text = (EditText) dialog.findViewById(R.id.num_value);
								settings.setQOil(text.getText().toString());
								dialog.hide();
							}
						});
						dialog.show();
						break;
					case 6:
						builder.setTitle("Enable/Disable Fog-Lamp");
						builder.setItems(bool_items, new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int item) {
								settings.setAntiB((String) bool_items[item]);
								//Toast.makeText(getApplicationContext(), cam_items[item], Toast.LENGTH_SHORT).show();
							}
						});
						alert = builder.create();
						alert.show();
						break;
					case 7:
						builder.setTitle("Enable/Disable Cam");
						builder.setItems(bool_items, new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int item) {
								settings.setNbVitres((String) bool_items[item]);
								//Toast.makeText(getApplicationContext(), cam_items[item], Toast.LENGTH_SHORT).show();
							}
						});
						alert = builder.create();
						alert.show();
						break;
					default:
						break;
					}
				}else{
					//Si le bluetooth est selectionné
					//don't show the alertbox
					//Démarre l'activité bluetooth
					Intent bluetoothManagerIntent = new Intent(getBaseContext(),
							BluetoothManager.class);
					startActivity(bluetoothManagerIntent);
				}
			}
		});
	}
}
